# -*- coding: utf-8 -*-
"""
配置文件模块
管理各种文件类型的识别规则和特殊前缀
"""
from typing import List, Dict


class VideoConfig:
    """视频文件识别配置类"""

    # 无码特殊前缀配置（可扩展）
    UNCENSORED_PREFIXES: List[str] = [
        'SKYHD', 'SKY', 'SMBD', 'S2MBD', 'MCB3DBD', 'MKBD-S', 'LAFB', 'HEYZO', 'CWPBD', 'XXX-AV'
    ]

    # 视频文件扩展名
    VIDEO_EXTENSIONS: List[str] = [
        '.mp4', '.avi', 'mkv', '.wmv', '.mpg', '.mov', '.flv'
    ]

    # 特殊标识符
    SUBTITLE_MARKER: str = '-C'  # 字幕标识
    SEGMENT_MARKER: str = '-CD'  # 分段标识
    LEAK_MARKER: str = '流出'  # 内部流出标识
    FOURK_MARKER: str = '4K'  # 4K版本标识

    # 正则表达式模式 (只匹配核心番号)
    PATTERNS: Dict[str, str] = {
        # FC2格式: FC2-数字
        'fc2': r'^FC2-(\d+)$',

        # N/K特殊格式: N或K后直接跟4位以上数字 (例如 N1011, K1544)
        'uncensored_nk_format': r'^([NK])(\\d{4,})$',

        # 无码纯数字格式: 数字[-_]数字
        'uncensored_numeric': r'^(\\d+)[-_](\\d+)$',

        # 无码特殊前缀格式: 前缀-数字
        'uncensored_prefix': None,  # 动态生成

        # 有码格式: 字母-数字
        'censored': r'^([a-zA-Z]+)-(\\d+)$'
    }

    @classmethod
    def get_uncensored_prefix_pattern(cls) -> str:
        """动态生成无码特殊前缀的正则表达式"""
        return '|'.join(cls.UNCENSORED_PREFIXES)

    @classmethod
    def add_uncensored_prefix(cls, prefix: str) -> None:
        """添加新的无码特殊前缀"""
        if prefix not in cls.UNCENSORED_PREFIXES:
            cls.UNCENSORED_PREFIXES.append(prefix)

    @classmethod
    def get_all_patterns(cls) -> Dict[str, str]:
        """获取所有正则表达式模式"""
        patterns = cls.PATTERNS.copy()

        # censored 规则需要排除所有已知的无码前缀
        all_uncensored_prefixes = cls.UNCENSORED_PREFIXES + ['N', 'K', 'FC2']

        # 动态构建排除列表
        # negative_lookahead = ''.join([f'(?!{prefix.upper()})' for prefix in all_uncensored_prefixes])
        # patterns['censored'] = f'^{negative_lookahead}([a-zA-Z]+)-(\\d+)$'

        patterns['uncensored_prefix'] = cls.get_uncensored_prefix_pattern()
        return patterns
